import axios from 'axios'

// import { Message } from 'element-ui'
// axios.create是一个函数  返回值就是Axios实例  就是axios对象
// request就是axios
const request = axios.create({
  // 配置对象 将来使用request发送请求
  // 会默认添加的内容
  /**
   * 将来用request发送请求 request（{url：'/wangshiwei'}）
   * 实际将来发送请求时 地址由 base URL + url 组成
   * 实际请求地址 /api/wangshiwei
   */
  baseURL: '/api/user', // 复用请求地址前缀
  timeout: 5000, // 请求超时时间 超过时间自动中断请求
  headers: {
    // 公共请求头
  }
})

/**
 * 一旦使用request发送请求 发送请求的流程
 *  1. 触发请求拦截器设置的回调函数
 *         得到的参数 是发送请求的配置对象
 *         返回数据   是发送请求的配置对象
 *  2. request内部会发送请求（此时服务器就会接收到请求）
 *         得到参数 发送请求的配置对象
 *         返回数据 服务器响应的结果
 *  3. 触发响应拦截器的回调函数
 *         得到的参数 服务器响应的结果
 *         返回数据
 *  4. async await 后面代码
 *
 */

// 请求拦截器
request.interceptors.request.use(
  // 成功
  (config) => {
    // 进度条开始
    // 设置（复用）公共请求参数
    // config就是请求的配置对象
    // if (/^\/mock/.test(config.url)) {
    //   config.baseURL = ''
    // }

    return config
  }
  // () => {} //失败
)
// 响应拦截器
request.interceptors.response.use(
  // 怎么判断成功失败
  // 看响应状态码  2开头成功 非2开头失败
  // 请求成功
  (response) => {
    // 进度条结束
    // response就是服务器的响应结果
    if (response.data.code === 200) {
      return response.data.data
    } else {
      // 功能失败
      // Message.error(response.data.message)
      // alert()
      return Promise.reject(response.data.message)
    }
  },
  // 请求失败
  (error) => {
    // 进度条结束
    alert(error)
    return Promise.reject(error)
  }
)
export default request
